/***************************************************************************
 创建者: 华磊
 开始时间: 2018.8.14
 copyright: (C) 华友高科
 修改说明: (每次有修改就添加一条，带有 修改人，修改时间，修改描述)
 example (1) 李文友 2017.5.8 类的具体实现代码编写

 ***************************************************************************
 *  @file powermanager.h
 *  功能:权限管理，系统对外总接口类
 *
 *                                                                         *
 ***************************************************************************/
#ifndef POWERMANAGER_H
#define POWERMANAGER_H

#include "MacroDefine/GeneralDefine.h"
#include <string>
#include <QString>
#include <vector>
#include <QMap>
#include "globalDefine.h"
#include <gSoapFoundation/soapStub.h>

class MessageLog;
class MeasureTime;

/**
 * @brief The PowerManager class ，权限管理，系统对外总接口类.gsoap webserver mainWindow都会调用
 */
class PowerManager
{

public:
    explicit PowerManager();


    ~PowerManager();

public:
    int setValidAxisPositionIncre(int axisId,int incrementCommand);

    /**
     * @brief getVrepRadianToEncoder ｖrep用
     * @param robID
     * @param axis
     * @param radianVec
     * @return
     */
    int getVrepRadianToEncoder( int robID,int axis,  float &radianVec );

    /**
     * @brief getVrepEncoderToRadian ｖrep用
     * @param robID
     * @param axis
     * @param encoderVec
     * @return
     */
    float getVrepEncoderToRadian(int robID,int axis,  const int &encoderVec );
    /**
     * @brief initialServoParameter 初始化伺服配置参数
     * @param robID
     * @return
     */
    int initialServoParameter(int robID);
    /**
     * @brief setMotorControlMode 设置电机控制模式
     * @param robID
     * @param axisId
     * @param modeIn
     * @return
     */
    int setMotorControlMode(int robID,int axisId, E_MOTOR_CONTROL_MODE modeIn);
    /**
     * @brief algorithmFunctioncall 算法实时调用接口
     * @param robID
     * @param returnMutexFlag
     * @return
     */
//    QVector<MotorData> algorithmFunctioncall(int robID, int &returnMutexFlag);
    int algorithmFunctioncall(int robID, QVector<bool> servoOnStatus, QVector<MotorData> motorFeedback,
                              QVector<MotorData> &motorCommandOut, int &returnMutexFlag);
    int getMotorEncoderPulsePerRound(int robID, QVector<double>& pulseOut);

private:
    int positionIncrement;
    int currentValidAxisId;

};

#endif // POWERMANAGER_H
